import Vue from 'vue'
import Vuex from 'vuex'
import VuexPersistence from 'vuex-persist'
Vue.use(Vuex)

const state = { //在登陆时设置状态,
	token: null,
	userinfo: null,
	isLogin: null, // 当前登录状态,
	loginTime:{
		expires: null, // 有效时间毫秒级 //默认登陆有效时间
		startTime: null //记录何时将值存入缓存，毫秒级
	}, // 登陆有效时间
	count: 1
}

const mutations = { // 同步
    setToken(state, token) { // token储存
        state.token = token
    },
	setisLogin(state, islogin){ // 登陆状态储存
		state.isLogin = islogin
	},
	setUserinfo(state, userinfos){ // 设置保存用户基本信息
		state.userinfo = userinfos
	},
	setloginTime(state, expires){ // 改变有效时间的方法
		state.loginTime.expires = expires
		state.loginTime.startTime = new Date().getTime()
	},
	add(state) {
		state.count++
	},
	reducers(state){
		state.count--
	}
}

const vuexLocal = new VuexPersistence({ // 自动存取localStorage
    storage: window.localStorage,
	reducer: state => ({
		token: state.token, // 存储loaclStorage的值
		userinfo: state.userinfo, // 用户基本信息
		isLogin: state.isLogin ,// 存储登陆状态
		loginTime: state.loginTime // 登陆有效时间
	})
})

const getters = {
	count (){
		state.count+=100
	}
}

const actions ={ // 调用mutations方法 // 异步
	setTokenActions(context,value){
		context.commit('setToken',value)
	},
	setisLoginActions(context,value){
		context.commit('setisLogin',value)
	},
	setUserinfoActions(context,value){
		context.commit('setUserinfo',value)
	},
	setloginTimeActions(context,value){
		context.commit('setloginTime',value)
	},
	addActions(context,value){
		setTimeout(()=>{
			console.log(value)
			context.commit('add')
		}, 2000)
	}
}

const Store = new Vuex.Store({
	state,
	getters,
	actions,
	mutations,
	plugins:[vuexLocal.plugin]
})

export default Store